import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @Author: XJH
 * @Description: TODO
 * @Date: 2025/10/24 21:53
 * @Version: 1.0
 */
public class Find_all_letter_anagrams_in_a_string {
    public List<Integer> findAnagrams(String s, String p) {
        ArrayList<Integer> ans = new ArrayList<>();
        int cntP[]=new int[26];
        int cntS[]=new int[26];
        for (char c : p.toCharArray()) {
            cntP[c-'a']++;
        }
        for(int right=0;right<s.length();right++){
            // 步骤1：将当前右指针的字符加入窗口，更新 cntS
            cntS[s.charAt(right) - 'a']++;

            int left = right - p.length() + 1;
            if(left<0){
                continue;
            }
            if(Arrays.equals(cntS,cntP)){
                ans.add(left); // 是变位词，记录左边界索引
            }
            // 步骤5：左指针的字符离开窗口，更新 cntS（为下一次窗口移动做准备）
            cntS[s.charAt(left) - 'a']--;
        }
        return ans;
    }

}
